/*
 * dsm_test.cpp
 *
 *  Created on: Dec 15, 2013
 *      Author: m
 */

#include "SharedMemory2.h"
#include "DSMManager.h"
#include "CPrinter.h"

using ipc::CPrinter;
using ipc::SharedMemory2;

int main ( int argc, char* argv[] )
{
    std::string nombreUnico;
    ContadorDistribuido *contador =
            SharedMemory2<ContadorDistribuido>::get( DSM_IPC_BASEFILE, SHM_TEST );

    CPrinter::setHeader( "dsm_test" );

    if ( argc != 2 )
    {
        CPrinter::printErr( "Cantidad de argumentos invalida" );
        CPrinter::printErr( "USO: dsm_test [nombreUnico] " );
        exit ( 1 );
    }

    nombreUnico = argv[1];

    CPrinter::setHeader( nombreUnico );

    DSMManager::inicializar( nombreUnico );

    while ( true )
    {
        // Pedir el token
        DSMManager::pedir( DSMID_TEST );

        // Mostrar el valor
        CPrinter::printOut( "El valor actual del contador es: %d", *contador );

        // Incrementar el token
        contador->valor++;

        // Devolver el token
        DSMManager::liberar( DSMID_TEST );

        // Dormir un ratito
        int sleepTime = random() % 40;
        CPrinter::printOut( "Durmiendo durante: %ds", sleepTime );
        sleep( sleepTime );
    }

    return 0;
}
